unit clsCidade;

interface

uses Dm, dbtables, biblio, Sysutils;

type
  TCidade = class(TObject)
  private
    Cid_Codigo: string;
  public
    Pais_Codigo: string;
    Cid_est_sigla: string;
    Cid_Nome: string;
    Cid_ddd: string;
    Cid_CEP: string;
    Cod_Cid: string; // Campo utilizado para conversao - retorna o codigo na pesquisa por nome da cidade (apenas)
    Cid_CodMunicipio: string;
    function Gravar(p_Cid_Codigo: string): Byte;
    function Recuperar(p_Cid_Codigo: string): Byte;
    function Recuperar2(p_Cid_Codigo, p_Est_Siglas: string): boolean;
    function Recuperar_ultimo: string;
    function RecuperarNome(p_Cid_nome: string): Byte;
    function RecuperarNome1(p_Cid_nome, p_UF: string): Byte;
    function Excluir(p_Cid_Codigo: string): Byte;
    function Ultimo: Integer;
    procedure Consultar(var p_q: TQuery; p_nome: string);
    procedure Consultar2(var tq: TQuery; p_nome, estados: string);
  end;

implementation

function TCidade.Gravar;
var
  tq: TQuery;
begin
  tq := Tquery.Create(DmInt);
  tq.databasename := dmint.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('SELECT * FROM Cidade where Cid_Codigo=:k_Cid_Codigo');
  tq.parambyname('k_Cid_Codigo').asstring := strzero(p_Cid_Codigo, 4);
  tq.open;
  if tq.eof then begin
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('INSERT INTO Cidade VALUES(:k_Cid_Codigo,:k_pais_codigo,:k_Cid_est_sigla,:k_Cid_Nome,:k_cid_ddd,:k_Cid_CEP,:k_Cid_CodMunicipio)');
  end else begin
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('UPDATE Cidade SET Cid_Nome=:k_Cid_Nome,est_sigla=:k_Cid_est_sigla,Pais_Codigo=:k_Pais_Codigo,Cid_ddd=:k_Cid_ddd, Cid_Cep=:k_Cid_CEP, Cid_CodMunicipio =:k_Cid_CodMunicipio WHERE Cid_Codigo=:k_Cid_Codigo');
  end;
  tq.parambyname('k_Cid_Codigo').asstring := strzero(p_Cid_Codigo, 4);
  tq.parambyname('k_Cid_Nome').asstring := Cid_Nome;
  tq.parambyname('k_Cid_est_sigla').asstring := Cid_est_sigla;
  tq.parambyname('k_Pais_Codigo').asstring := strzero(Pais_Codigo, 2);
  tq.parambyname('k_Cid_ddd').asstring := Cid_ddd;
  tq.parambyname('k_Cid_CEP').AsString := Cid_CEP;
  tq.ParamByName('k_Cid_CodMunicipio').AsString := Cid_CodMunicipio;
  tq.close;

  if not DmInt.Db.InTransaction then
    DmInt.Db.StartTransaction;
  try
    tq.execsql;
    DmInt.Db.Commit;
    result := 1;
  except
    DmInt.Db.Rollback;
    result := 0;
  end;
  tq.close;
  tq.Free;
end;

function TCidade.Recuperar;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('SELECT * FROM Cidade where Cid_Codigo=:k_Cid_Codigo');
  tq.Params[0].asstring := strzero(p_Cid_Codigo, 4);
  tq.open;
  Cid_Codigo := p_Cid_Codigo;
  Cod_Cid := p_Cid_Codigo;
  if tq.eof then begin
    Cid_Nome := '';
    Cid_est_sigla := '';
    Pais_Codigo := '';
    Cid_ddd := '';
    Cid_CEP := '';
    Cid_CodMunicipio := '';
    Result := 0;
  end else begin
    Cid_Nome := tq.fieldbyname('Cid_Nome').asstring;
    Cid_est_sigla := tq.fieldbyname('est_sigla').asstring;
    Pais_Codigo := tq.fieldbyname('Pais_Codigo').asstring;
    Cid_ddd := tq.fieldbyname('Cid_ddd').asstring;
    Cid_CEP := tq.fieldbyname('Cid_CEP').AsString;
    Cid_CodMunicipio := tq.FieldByName('Cid_CodMunicipio').asstring;
    Result := 1;
  end;
  tq.Close;
  tq.Free;
end;

function TCidade.Recuperar2(p_Cid_Codigo, p_Est_Siglas: string): boolean;
var
  tq: TQuery;

begin
  tq := TQuery.Create(DmInt);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;

  try
    tq.SQL.Clear;
    tq.SQL.Add('SELECT * FROM Cidade where Cid_Codigo=:k_Cid_Codigo and est_sigla in(' + p_Est_Siglas + ')');
    tq.ParamByName('k_Cid_Codigo').AsString := StrZero(p_Cid_Codigo, 4);
    tq.Open;

    Cid_Codigo := p_Cid_Codigo;
    Cod_Cid := p_Cid_Codigo;
    if (tq.Eof) then begin
      Cid_Nome := '';
      Cid_est_sigla := '';
      Pais_Codigo := '';
      Cid_ddd := '';
      Cid_CEP := '';
      Cid_CodMunicipio := '';
      Result := false;

    end else begin
      Cid_Nome := tq.FieldByName('Cid_Nome').AsString;
      Cid_est_sigla := tq.FieldByName('est_sigla').AsString;
      Pais_Codigo := tq.FieldByName('Pais_Codigo').AsString;
      Cid_ddd := tq.FieldByName('Cid_ddd').AsString;
      Cid_CEP := tq.FieldByName('Cid_CEP').AsString;
      Cid_CodMunicipio := tq.FieldByName('Cid_CodMunicipio').AsString;
      Result := true;

    end;

  finally
    tq.Close;
    FreeAndNil(tq);

  end;

end;

function TCidade.RecuperarNome;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('SELECT * FROM Cidade where Cid_Nome=:k_Cid_Nome');
  tq.Params[0].asstring := p_cid_nome;
  tq.open;
  if tq.eof then begin
    cod_cid := '';
    Result := 0;
  end else begin
    cod_cid := tq.fieldbyname('cid_codigo').asstring;
    Cid_Nome := tq.fieldbyname('Cid_Nome').asstring;
    Cid_est_sigla := tq.fieldbyname('est_sigla').asstring;
    Pais_Codigo := tq.fieldbyname('Pais_Codigo').asstring;
    Cid_ddd := tq.fieldbyname('Cid_ddd').asstring;
    Cid_CEP := tq.fieldbyname('Cid_CEP').AsString;
    Cid_CodMunicipio := tq.fieldbyname('Cid_CodMunicipio').AsString;
    Result := 1;
  end;
  tq.Close;
  tq.Free;
end;

function TCidade.Ultimo;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('SELECT max(cid_codigo) cid_codigo FROM Cidade order by Cid_Codigo');
  tq.open;
  tq.last;
  if tq.fieldbyname('Cid_Codigo').asstring = '' then
    result := 0
  else
    result := strtoint(tq.fieldbyname('Cid_Codigo').asstring) + 1;
  tq.close;
  tq.free;
end;

function TCidade.Excluir;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := dmint.db.databasename;
  tq.active := False;
  tq.close;
  tq.sql.Clear;
  tq.params.clear;
  tq.sql.add('DELETE FROM Cidade WHERE Cid_Codigo=:k_Cid_Codigo');
  tq.parambyname('k_Cid_Codigo').asstring := strzero(p_Cid_Codigo, 4);
  tq.execSQL;
  Result := 1;
  tq.close;
  tq.Free;
end;

procedure TCidade.Consultar;
begin
  p_q.sql.Clear;
  p_q.Params.Clear;
  p_q.sql.add('Select * from Cidade where Cid_Nome like :k_Cid_Nome order by Cid_Nome'); //Cid_Nome>=:k_Cid_Nome and cid_nome<=:z order by Cid_Nome');
  p_q.parambyname('k_Cid_Nome').asstring := '%' + p_nome + '%';
  //p_q.parambyname('z').asstring         := copy(repl('Z',50),1,50);
end;

procedure TCidade.Consultar2(var tq: TQuery; p_nome, estados: string);
begin
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Select * ' +

    'from Cidade ' +

    'where Cid_Nome like :k_Cid_Nome and ' +
    '      est_sigla in(' + estados + ') ' +

    'order by Cid_Nome');

  tq.ParamByName('k_Cid_Nome').AsString := '%' + p_nome + '%';

end;

function TCidade.Recuperar_ultimo: string;
var
  tq: TQuery;
begin
  tq := TQuery.create(DmInt.Db);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.Active := false;
  tq.sql.clear;
  tq.Params.clear;
  tq.SQL.add('Select max(cid_codigo) as maior from cidade');
  tq.open;
  if tq.fieldbyname('maior').AsString <> '' then
    Result := IntToStr(strtoint(tq.fieldbyname('maior').Asstring) + 1)
  else
    Result := '1';
  if Result > '9999' then
    Result := '9999';
  tq.close;
  tq.free;
end;

function TCidade.RecuperarNome1(p_Cid_nome, p_UF: string): Byte;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.Params.Clear;
  tq.sql.clear;
  tq.sql.add('select * from cidade ');

  if Trim(p_Cid_nome) <> '' then
    tq.sql.add('where ltrim(cid_nome) = :k_Cid_Nome and ')
  else
    tq.sql.add('where cid_nome is null and ');

  if Trim(p_UF) <> '' then
    tq.sql.add('ltrim(est_sigla)= :UF ')
  else
    tq.sql.add('est_sigla is null ');

  if Trim(p_Cid_nome) <> '' then
    tq.ParamByName('k_Cid_Nome').asstring := p_cid_nome;

  if Trim(p_UF) <> '' then
    tq.ParamByName('UF').asstring := p_UF;

  tq.open;
  if tq.eof then begin
    cod_cid := '';
    Result := 0;
  end else begin
    cod_cid := tq.fieldbyname('cid_codigo').asstring;
    Cid_Nome := tq.fieldbyname('Cid_Nome').asstring;
    Cid_est_sigla := tq.fieldbyname('est_sigla').asstring;
    Pais_Codigo := tq.fieldbyname('Pais_Codigo').asstring;
    Cid_ddd := tq.fieldbyname('Cid_ddd').asstring;
    Cid_CEP := tq.fieldbyname('Cid_CEP').AsString;
    Cid_CodMunicipio := tq.fieldbyname('Cid_CodMunicipio').AsString;
    Result := 1;
  end;
  tq.Close;
  tq.Free;
end;

end.
